package ar.edu.unju.fi.model.dao.impl;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import ar.edu.unju.fi.model.dao.DetallePedidoDAO;
import ar.edu.unju.fi.model.domain.DetallePedido;
import ar.edu.unju.fi.model.domain.Producto;

public class DetallePedidoDAOImpl extends HibernateDaoSupport implements DetallePedidoDAO {

	public List<DetallePedido> getAll(long id) {
		// TODO Auto-generated method stub
		return null;
	}

	public List<DetallePedido> getAll() {
		logger.info("cargando toda los detalles");
		Criteria criteria = getSession().createCriteria(DetallePedido.class);
		return criteria.list();
	}

	public DetallePedido validateCode(long id) {
		logger.info("validando el detalle pedido");
		Criteria criteria = getSession().createCriteria(DetallePedido.class);
		criteria.add(Restrictions.eq("detalle_pedido_id",id));
		return (DetallePedido) criteria.uniqueResult();
	}

	public void save(DetallePedido detalle) {

		logger.info("guardando el detalle");
		try {getHibernateTemplate().save(detalle);
			
		} catch (Exception e) {
			logger.error("Error al guardar el detalle");
		}
	}

	public void update(DetallePedido detalle) {
		
		try {
			getHibernateTemplate().update(detalle);
		} catch (Exception e) {
			logger.error("Error al actualizar el detalle");
		}
	}

	public List<Producto> getProducto(List<DetallePedido> detalles) {
		List<Producto>	lista = new ArrayList<Producto>();
		logger.info("Obteniendo lista de productos");
		for (DetallePedido d : detalles) {
			
			Producto p = (Producto) getHibernateTemplate().get(Producto.class, d.getCodigo())	;	
			lista.add(p);
			
		}
		
		return  lista;
	}

	public List<DetallePedido> getAllDetalle(Integer pedidoId) {
		logger.info("Cargando los detalles segun id del pedido");
		Criteria criteria = getSession().createCriteria(DetallePedido .class);
        if(pedidoId != null)
            criteria.add(Restrictions.ilike("pedido_id", pedidoId));
        return criteria.list();
		
		
		
	
	}

}
